/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BussinesLogic;

import EntidadesCM.RolCM;
import EntidadesCM.UsuarioCM;
import Entities.Afiliado;
import Entities.Rol;
import Entities.Usuario;
import Entities.UsuarioRol;
import controller.AfiliadoJpaController;
import controller.UsuarioJpaController;
import controller.UsuarioRolJpaController;
import controller.exceptions.NonexistentEntityException;
import controller.exceptions.PreexistingEntityException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

/**
 *
 * @author Nas
 */
public class UsuarioBL implements Serializable {

    UsuarioJpaController usuarioJpaController;

    public void crearUsuario(UsuarioCM usuarioCM) throws PreexistingEntityException, Exception {
        Usuario usuario = new Usuario();
        usuarioJpaController = new UsuarioJpaController();
        usuario.setUsername(usuarioCM.getUsername());
        usuario.setPassword(usuarioCM.getPassword());
        usuario.setCreateBy(usuarioCM.getCreateBy());
        usuario.setFechaCreate(Calendar.getInstance().getTime());
        usuarioJpaController.create(usuario);
    }

    public void editarUsuario(UsuarioCM usuarioCM) throws NonexistentEntityException, Exception {
        Usuario usuario = new Usuario();
        usuarioJpaController = new UsuarioJpaController();
        usuario.setUsername(usuarioCM.getUsername());
        usuario.setPassword(usuarioCM.getPassword());
        usuario.setModifiedBy(usuarioCM.getModifiedBy());
        usuario.setFechaModified(Calendar.getInstance().getTime());
        usuarioJpaController.edit(usuario);    
    }

    public void eliminarUsuario(BigDecimal id) throws NonexistentEntityException {
        Usuario usuario = new Usuario();
        usuarioJpaController = new UsuarioJpaController();
        usuarioJpaController.destroy(usuario.getIdUsuario());   
    }

    public List<UsuarioCM> buscarAllUsuarios() {
        List<UsuarioCM> usuariosCM = new ArrayList<>();
        usuarioJpaController = new UsuarioJpaController();
        UsuarioCM usuarioCM;

        for (Usuario usuario : usuarioJpaController.findUsuarioEntities()) {
            usuarioCM = new UsuarioCM();
            usuarioCM.setIdUsuario(usuario.getIdUsuario());
            usuarioCM.setUsername(usuario.getUsername());
            usuarioCM.setPassword(usuario.getPassword());
            usuariosCM.add(usuarioCM);
        }
        return usuariosCM;
    }

    public UsuarioCM buscarUsuarioByUsernamePassword(String username, String password) {
        List<Usuario> usuarios;
        List<Rol> roles;
        usuarioJpaController = new UsuarioJpaController();
        usuarios = usuarioJpaController.findUsuarioByUsernamePassword(username, password);
        UsuarioRolJpaController usuarioRolJpaController = new UsuarioRolJpaController();
       // UsuarioRol usuarioRol = new UsuarioRol();
        if (usuarios.size() > 0) {
            UsuarioCM usuarioCM = new UsuarioCM();
            for (Usuario usuario : usuarios) {
                usuarioCM.setIdUsuario(usuario.getIdUsuario());
                usuarioCM.setUsername(usuario.getUsername());
                usuarioCM.setPassword(usuario.getPassword());
                usuarioCM.setEstado(usuario.getEstado());
                usuarioCM.setNombre(usuario.getNombre());
                usuarioCM.setApellido(usuario.getApellido());
                
                roles = usuarioRolJpaController.findRolesByUsuario(usuario.getIdUsuario());
                List<RolCM> rolesCM = new ArrayList();
                RolCM rolCM;
                for (Rol rol : roles){
                    rolCM  = new RolCM();
                    rolCM.setIdRol(rol.getIdRol());
                    rolCM.setRol(rol.getRol());
                    rolCM.setEstado(rol.getEstado());
                    rolCM.setDescripcion(rol.getDescripcion());
                    rolesCM.add(rolCM);
                }
                    usuarioCM.setRolList(rolesCM);
            }
            return usuarioCM;
        } else {
            return null;
        }

    }
}
